package br.com.itc.componentes.input
{
	import br.com.itc.componentes.validacao.IValidavel;
	
	import flash.events.Event;
	import flash.events.KeyboardEvent;
	
	import mx.controls.TextInput;
	import mx.events.FlexEvent;
	import mx.validators.Validator;
	
	public class Texto extends TextInput implements IValidavel
	{
		
		private var _campoObrigatorio: Boolean = false;
		private var _descricaoErro: String = "Campo Obrigatório!";
		private var validator: Validator = new Validator;
		
		public function Texto()
		{
			super();
			this.addEventListener(FlexEvent.CREATION_COMPLETE, init);
			this.styleName = "personalTextInput"; //nome de estilo
		}
		
		public function get campoObrigatorio(): Boolean {
			return _campoObrigatorio;
		}
		
		public function set campoObrigatorio(isObrigatorio: Boolean): void {
			this._campoObrigatorio = isObrigatorio;
		}
		
		public function get descricaoErro(): String {
			return _descricaoErro;
		}
		
		public function set descricaoErro(descricaoErro: String): void {
			this._descricaoErro = descricaoErro;
		}
		
		private function init(event: FlexEvent): void {
			if(_campoObrigatorio) {
				this.addEventListener(KeyboardEvent.KEY_UP, validar);
				validator.source = this;
				validator.property = "text";
				validator.required = true;
				validator.requiredFieldError = _descricaoErro;
				this.toolTip = _descricaoErro;
				validar(null);
			}
		}
		
		private function validar(evt: Event = null): void {
			dispatchEvent(new FlexEvent(FlexEvent.VALUE_COMMIT));
			resourceManager.update();
		}
		
		public function isValido(): Boolean {
			var valido: Boolean = true;
			if (_campoObrigatorio && text == "") {
				valido = false;
			}
			return valido;
		}
		
//		public function validacaoEmail():Boolean {
//			var validEmail:EmailValidator = new EmailValidator();
//			
//			validEmail.required = _validarObrigatorio; //verifica se é requerido
//
//			validEmail.requiredFieldError = (_validarMensagem == "" ?
//										"Campo de preenchimento obrigatório!" :
//										_validarMensagem); //determina se mensagem de requerido
//
//			validEmail.invalidCharError = 
//			validEmail.invalidDomainError =
//			validEmail.invalidIPDomainError = 
//			validEmail.invalidPeriodsInDomainError = 
//			validEmail.missingAtSignError = 
//			validEmail.missingPeriodInDomainError = 
//			validEmail.missingUsernameError = 
//			validEmail.tooManyAtSignsError = (_validarMensagem == "" ?
//										"Email inválido!" :
//										_validarMensagem); //mensagem de validação de email
//			validEmail.source = this; //campo a validar
//			validEmail.property = "text"; //propriedade a verificar
//			
//			if (validEmail.validate().type == ValidationResultEvent.INVALID) //efetua validação
//				return false;
//			else
//				return true;
//		}		
	}
}